Administration Linux et réseau
1 - Installer Linux
- 1.1 - Rendez vous sur le site de Linux Mint. Choisissez un environnement graphique et télécharger l'ISO correspondante. (Si vous souhaitez utiliser KDE, il vous faudra aller chercher la version 18.3)
- 1.2 - (Optionnel, mais recommandé pour plus de sécurité) Pendant que l'image télécharge, trouvez le programme
sha256sum.exe(demander au formateur). Ouvrez une console sous Windows (Menu démarrer > taper 'cmd' pour trouver 'Invite de commande') puis lancez le programmesha256sum.exesur le fichier.isotéléchargé précedemment. Comparez la somme de contrôle obtenue avec celle disponible sur le site de Linux Mint. - 1.3 - Créer une nouvelle machine virtuelle en suivant les instructions :
- de type Linux, avec comme version "Other Linux (64-bit)" ("Ubuntu (64-bit)" devrait fonctionner également) ;
- 2048 Mo de RAM semble raisonnable ;
- créer un disque dur virtuel, de type VDI, dynamiquement alloué, de 20 Go.
- 1.4 - Utilisez l'ISO téléchargée en tant que CD Rom virtuel que vous insérez dans la machine virtuelle. Pour ce faire : dans Configuration, Stockage, cliquer sur le CD rom (vide) puis, sur l'icone de CD rom toute à droite, et choisir l'ISO téléchargée.
- 1.5 - Démarrer la machine : Linux Mint est censé se lancer (utiliser le mode de compatibilité sinon)
- 1.6 - Lancer l'installation de Linux Mint
- choisir sa langue et son clavier
- accepter l'installation des logiciels tiers
- lors du choix du type de partitionnement, cliquer sur "Autre chose"
- créer une nouvelle table de partition, puis partitionner à l'aide du "+" l'espace de la manière suivante :
- 300 Mo pour
/booten ext4 - 14 Go pour
/en ext4 - 5 Go pour
/homeen ext4
- 300 Mo pour
Tâches automatiques avec les jobs Cron
- 9.0 - Écrire un job cron qui tourne en tant que
votreutilisateuret toutes les minutes met le résultat de la commandedatedans/home/votreutilisateur/date - 9.1 - Écrire un job cron qui tourne en tant que
rootet toutes les minutes remplace le contenu de/etc/resolv.confparnameserver 89.234.141.66 - 9.2 - Écrire un petit script nommé dans
autoupdateque l'on mettra dans/etc/cron.weeklyqui lanceraapt updateetapt dist-upgrade -yune fois par semaine. (NB: dans la vraie vie on ne ferait pas ça ! La problématique de mises à jour automatiques et plus compliquée que ça. Il existe des paquets commeunattended-upgradespour gérer ça) - 9.3 - Sur votre serveur, écrire un job cron qui tourne en tant que
votreutilisateuret toutes les heures (mais le temps de tester, disons toutes les minutes!), créer un backup des données de votre nextcloud vers son home à l'aide detar. (Les données de Nextcloud sont stockées dans/var/www/nextcloud/data)
Initiation à Docker pour le déploiement d'applications
- 10.1 - Installer Docker en suivant les instructions sur le site officiel : https://docs.docker.com/engine/install/debian/
Cela devrait se résumer à faire (en root)
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install docker-ce
Vous devriez maintenant constater qu'un service docker tourne sur la machine. Vous devriez aussi voir qu'il existe une nouvelle interface réseau docker0 dans la sortie de ip a.
- 10.2 - Installons aussi Docker Compose, qui est une surcouche à Docker, et permet de manipuler plus simplement des ensembles de conteneurs. Pour avoir une version récente de ce logiciel, nous utilisons
pip, le gestionnaire de paquet du language python (qui est le langage utilisé pour développer Docker Compose).
apt install python3-pip
pip3 install docker-compose
- 10.3 - Récupérons le code de l'application en utilisant
git:
apt install git
cd /var/www/
git clone https://github.com/e-lie/microblog
10.4 - Rentrons dans le dossier
/var/www/microblog/. Notons l'existence d'un fichierDockerfile. Dans ce fichier, identifier les différentes étapes de la construction de l'image:- image de départ
- création d'un utilisateur système
- installation des dépendances de l'app avec pip
- copie des fichiers de l'app (code source et autre) dans l'image
- déclaration du port sur lequel fonctionnera l'application
- déclaration de l'"entrypoint", c'est à dire le programme ou script qui se lance au démarrage du conteneur
10.5 - Récupérer le fichier
docker-compose.ymlauprès du formateur. Ce fichier est destiné à être mis dans/var/www/microblog/. Dans ce fichier, constater que :- la première section corresponds à l'application à proprement parler (
microblog). L'image correspondante sera construite à partir du Dockerfile précédemment étudié. Ce conteneur exposera l'application sur le port 5000 dans la machine. C'est le port que nous utiliserons plus tard pour faire l'interface avec nginx. - la deuxième section corresponds à la base de donnée de l'application (
db). L'image correspondate (mariadb) existe déjà et sera récupérée sur le docker hub. Par contre, on précise via des variables quels sont les identifiants de DB à créér. - les identiants de la base de données de
dbsont repris dans la variableDATABASE_URLdu conteneurmicroblog. - les données effectives de la base de données sont stockées dans un volume
db-data, c'est-à-dire de données persistentes, stockées en dehors du conteneur.
- la première section corresponds à l'application à proprement parler (
10.6 - Déclencher le build du container microblog avec
docker-compose build microblog(notons ici qu'il n'y a pas besoin de dire àdocker-composede se baser sur le fichierdocker-compose.yml, car le nom est standardisé et il utilise implicitement le fichier portant ce nom dans le répertoire courant).10.7 - Démarrer le conteneur de base de donnée avec
docker-compose up -d db.- Regarder avec
docker-compose logs dbles logs du démarrage du conteneur pour vérifier que ça s'est bien passé. - Constater aussi que
docker-compose ps(commande qui permet de lister l'état des conteneurs, similaire àdocker ps) liste bien le conteneur dans l'état 'Up'. - Dans la machine hôte, lancer
ps -ef --forestpour voir le processusmysqlden cours d'execution, fils d'un processus nommé/usr/bin/containerd(...). - Ouvrir un shell bash dans le conteneur à l'aide de
docker-compose exec db bash. Dans ce shell qui tourne dans le conteneur, lancerps -ef --forestpour voir le processusmysqlden cours d'execution. (Vous devriez voir qu'il n'y a vraiment pas beaucoup de processus dans le conteneur !) - (Quitter le shell du conteneur)
- Regarder avec
10.8 - Démarrer le conteneur de l'application avec
docker-compose up -d microblog.- Regarder avec
docker-compose logs microblogles logs du démarrage du conteneur pour vérifier que ça s'est bien passé. - Constater aussi que
docker-compose ps, qui permet de lister l'état des conteneurs, qu'il est bien dans l'état 'Up'. Vous devriez également voir que le port 5000 est exposé dans la machine (voir même publiquement !?) - Dans la machine hôte, lancer
ps -ef --forestpour voir le processuspythongunicornen cours d'execution, fils d'un processus nommé/usr/bin/containerd(...). - Ouvrir un shell bash dans le conteneur à l'aide de
docker-compose exec db sh(NB:sh! carbashn'est pas disponible dans ce conteneur...). Dans ce shell qui tourne dans le conteneur, lancerps -ef(pas d'option--forest! snif) pour voir le processuspythongunicornen cours d'execution. (Vous devriez voir qu'il n'y a vraiment pas beaucoup de processus dans le conteneur !) - (Quitter le shell du conteneur)
- Regarder avec
10.9 - Ajouter le bout de configuration nginx pour exposer l'application via le serveur web. Notez que l'application n'est pas conçue pour être installée sous un sous-chemin comme
/microblog(à la différence de Nextcloud) ... nous sommes obligé de l'exposer à la racine du domaine (location /), assurez-vous qu'il n'y a pas d'autre bout de conf qui conflicte ! :
location / {
proxy_pass http://127.0.0.1:5000;
}
10.10 - Après avoir rechargé nginx, vous devriez avoir accès à l'application sur
http://votre.domaine.tld/. Il vous faudra commencer par créer un compte via le lien de création de compte vers le bas de la page ("New User? Click to Register!"). (Inutile de mettre une vraie addresse mail !). S'amuser ensuite à poster quelques messages dans l'interface.10.11 - Faites
docker-compose downpour stopper et supprimer les conteneurs. Constater avecdocker-compose psqu'il n'y a effectivement plus de conteneur. Fairedocker-compose up -dpour recréer les conteneurs. Tentez de vous re-logger sur l'interface et ainsi de retrouver vos données. Savez-vous expliquer pourquoi vos données n'ont pas été supprimées ?10.12 - Refaire la même manipulation, mais cette fois avec l'option
-vdedocker-compose downqui supprime les volumes (dans notre cas, la base de donnée). Après avoir recréé les conteneurs, les données sont-elles toujours là ?